﻿using System.Collections.Generic;
using System.Linq;

namespace NetAccess.Message
{
    /// <summary>
    /// Classe représentant un message application au sein de la librairie NetAccess
    /// </summary>
    public class NetworkMessage
    {
        /// <summary>
        /// Obtiens le type du message NetAccess
        /// </summary>
        public object MessageIdentifier { get; private set; }

        /// <summary>
        /// Tableau contenant les données du message
        /// </summary>
        public object[] MessageData { get; set; }

        /// <summary>
        /// Constructeur d'un NetworkMessage
        /// </summary>
        /// <param name="messageType">Type du message</param>
        /// <param name="messageData">Données du message</param>
        public NetworkMessage(object messageType, params object[] messageData)
        {
            MessageIdentifier = messageType;
            MessageData = messageData;
        }

        /// <summary>
        /// Ajoute un objet au tableau de données
        /// </summary>
        /// <param name="data"></param>
        public void AddObjectData(object data)
        {
            var temp = MessageData != null ? new List<object>(MessageData) : new List<object>();
            temp.Add(data);
            MessageData = temp.ToArray();
        }

        /// <summary>
        /// Surcharge de la représentation textuelle de l'objet
        /// </summary>
        /// <returns>Une chaine de caractère représentant l'objet</returns>
        public override string ToString()
        {
            return MessageData.Aggregate(
                "+NetworkMessage : " + MessageIdentifier + "\n", 
                (current, o) => current + ("\t\t" + o + "\n"));
        }
    }
}
